import {currentDateTimeWithMillis} from "@/util/DateTimeUtil.tsx";

/**
 * 日志记录器
 */
export default class Logger{
    private readonly target: string;
    constructor(target: string) {
        this.target = target
    }

    /**
     * 打印跟踪日志信息,打印调用者堆栈信息
     * @param msg 日志信息说明
     * @param data 日志信息数据
     */
    tract(msg: string, ...data: never[]){
        console.trace("%c" + currentDateTimeWithMillis() + " [TRACE] " + this.target, "color: #DC143C", "：",msg, ...data);
    }

    /**
     * 打印开发日志
     * @param msg 日志信息说明
     * @param data 日志信息数据
     */
    debug(msg: string, ...data: any[]){
        console.debug("%c" + currentDateTimeWithMillis() + " [DEBUG] " + this.target , "color: #20B2AA", "：",msg, ...data);
    }

    /**
     * 打印info日志
     * @param msg 打印日志的说明
     * @param data 打印日志的附加数据
     */
    info(msg: string, ...data: never[]) {
        console.info("%c" +  currentDateTimeWithMillis() + " [INFO] " + this.target, "color: #228B22","：", msg, ...data);
    }

    /**
     * 打印警告日志信息
     * @param msg 打印日志的说明
     * @param data 打印日志的附加数据
     */
    warn(msg: string, ...data: any[]) {
        console.warn(currentDateTimeWithMillis() + " [WARN] " + this.target + " ：", msg, ...data);
    }

    /**
     * 打印错误日志信息
     * @param msg 打印日志的说明
     * @param data 打印日志的附加数据
     */
    error(msg: string, ...data: any[]) {
        console.error(currentDateTimeWithMillis() + " [ERROR] " + this.target + " ：", msg, ...data);
    }
}